home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / oh_towns / mkradio / mrd.bas < prev    next >
BASIC Source File  |  1991-10-18  |  14KB  |  388 lines

  1. 10 '
  2. 20 '  Make Radio Drama 
  3. 30 '                    by J
  4. 40 '
  5. 50 '
  6. 60 *INIT
  7. 70    CLEAR ,,512,800000
  8. 80    SCREEN@ 0: WIDTH 80,25:COLOR 0,0,0,4
  9. 90    DIM PCMDATA%(288016),PCMBUF%(96016),VDBUF%(130)
  10. 100    DIM CMDNAMES$(8),FLNAMES$(14),FLLNG&(14),STAT%(600)
  11. 110    DEFLNG A-N:I=1:J=1:K=1:A1=1:A2=1:ADR1=1:ADR2=1:ARG0=1:ARG1=1:ARG2=1
  12. 120    CL=1:CHENGE_F=1:RETRY_F=1:MARK=1:DIVP=1:CMD_SW=1:CMD_IND=1:NUM=1
  13. 130    LOC0=1:LOC1=1:LOC2=1:LOC3=1
  14. 140    CMD_NUM=6
  15. 150  FOR I=0 TO 7:PCMDATA%(I)=65+I:NEXT I
  16. 160  PCMDATA%(4)=RAND*10000:PCMDATA%(6)=-18944:PCMDATA%(7)=8
  17. 170  PCMDATA%(8)=-18832:PCMDATA%(10)=0:PCMDATA%(12)=1568:PCMDATA%(14)=60
  18. 180  YESNO$="[yes=左クリック no=右クリック]"
  19. 190  WA$= "時間がかかりますが,辛抱強くお待ち下さい."
  20. 200  ON ERROR GOTO *ERROR
  21. 210  '
  22. 220  RESTORE *COLOR
  23. 230  FOR I=0 TO 15:READ LOC0,LOC1,LOC2:PALETTE I,[LOC0,LOC1,LOC2]:NEXT I
  24. 240  '
  25. 250  RESTORE *CMDNAMES
  26. 260  FOR I=1 TO CMD_NUM:READ CMDNAMES$(I):NEXT I
  27. 270  '
  28. 280  MOUSE 0:MOUSE 1,20,20,1
  29. 290  '
  30. 300 ':::::::::::::::::::::::::::::::::::::::: Main Routine :::::::
  31. 310 GOSUB *MAIN_MENU
  32. 320 *MAIN_LOOP
  33. 330   GOSUB *GET_MOUSE  :IF ARG0=1 THEN *MAIN_LOOP
  34. 340   GOSUB *GET_CMD_POSI
  35. 350   IF CMD_IND=0 OR CMD_IND >CMD_NUM THEN *MN_SKIP
  36. 360     CMD_SW=2:  GOSUB *WRITE_CMD
  37. 370     ON CMD_IND GOSUB *PLAY,*REC,*MAKE,*QUIT,*SV1,*HCOPY
  38. 380     CMD_SW=1:  GOSUB *WRITE_CMD : GOTO *MAIN_LOOP
  39. 390   *MN_SKIP
  40. 400   GOSUB *GET_ED_POSI
  41. 410   IF ARG0=0 THEN *MN_SKIP2
  42. 420     IF ARG0 <15 THEN GOSUB *FILE_LOAD ELSE GOSUB *PATTERN_EDIT
  43. 430     GOTO *MAIN_LOOP
  44. 440   *MN_SKIP2
  45. 450   IF ARG1 <20   OR ARG1 >619  THEN *MAIN_LOOP
  46. 460   IF ARG2 < 230 OR ARG2 > 240 THEN *MAIN_LOOP
  47. 470   GOSUB *ERASE_PATTERN
  48. 480 GOTO *MAIN_LOOP
  49. 490 '
  50. 500   *QUIT
  51. 510     TMSG$="終了します."+YESNO$
  52. 520     GOSUB *WRITE_TMSG
  53. 530     GOSUB *GET_MOUSE
  54. 540       IF ARG0=1 THEN GOSUB *ERASE_TMSG:RETURN 
  55. 550     TMSG$="   Good Luck and Good Bye " : GOSUB *WRITE_TMSG
  56. 560     MOUSE 5
  57. 570 END
  58. 580 ':::::::::::::::::::::::::::::::::::: End Main ::::::::::::::::::::
  59. 590 '
  60. 600 *MAIN_MENU
  61. 610   CLS
  62. 620   LINE(2,2)-(637,477),PSET,%15,B
  63. 630   LINE(6,6)-(444,91),PSET,%15,BF,%1
  64. 640   SYMBOL (0,32) ," Make Radio Drama  ",3,3,%5,,,6
  65. 650   LINE(450,20)-(633,105),PSET,%15,B
  66. 660   LINE(6,112)-(633,245),PSET,%15,BF,%4
  67. 670   LINE(6,262)-(633,398),PSET,%2,BF,%0
  68. 680   LINE(19,141)-(620,207),PSET,%15,BF,%0
  69. 690   LINE(19,230)-(620,240),PSET,%15,BF,%0
  70. 700   SYMBOL (7,117)," Sound Pattern ",1,1,%1,,,4
  71. 710   GOSUB *ERASE_TMSG
  72. 720   FOR ARG0=1 TO 14
  73. 730     GOSUB *WRITE_ED_MENU
  74. 740   NEXT ARG0
  75. 750   FOR I=0 TO 30
  76. 760     IF I MOD 10 = 0 THEN SYMBOL (8+20*I,210),STR$(I),1,1,%15,,,0
  77. 770     LINE(19+20*I,230)-(19+20*I,225),PSET,%15
  78. 780   NEXT I:
  79. 790   CMD_SW=1:GOSUB *WRITE_ALL_CMD
  80. 800   FOR ARG0= 20 TO 619 
  81. 810     STAT%(ARG0-19)=0
  82. 820     LINE(ARG0,231)-(ARG0,239),PSET,%1
  83. 830   NEXT ARG0
  84. 840 RETURN
  85. 850 ' 
  86. 860 ':::::::::::::::::::::::::::::::::: Service Routine :::::::::::::
  87. 870 *PLAY
  88. 880   PCMPLAY PCMDATA%
  89. 890 RETURN
  90. 900 '
  91. 910 *REC
  92. 920   TMSG$="10秒間録音します. 準備ができたら左クリックしてください."
  93. 930   GOSUB *WRITE_TMSG
  94. 940   GOSUB *GET_MOUSE  :IF ARG0=1 THEN *REC_END
  95. 950   TMSG$="Recording" :GOSUB *WRITE_TMSG 
  96. 960   PCMREC PCMBUF%,19200
  97. 970   '
  98. 980   TMSG$="終了しました.  試聴"+YESNO$
  99. 990   GOSUB *WRITE_TMSG :GOSUB *GET_MOUSE
  100. 1000   IF ARG0=1 THEN *REC_SKIP
  101. 1010      PCMPLAY PCMBUF%
  102. 1020      TMSG$="もう一度録音し直しますか? "+YESNO$
  103. 1030      GOSUB *WRITE_TMSG
  104. 1040      GOSUB *GET_MOUSE  :IF ARG0=0 THEN *REC
  105. 1050   *REC_SKIP
  106. 1060   EXT$="snd":GOSUB *FILE_MSG
  107. 1070   IF MID$(A$,2,1)=":" THEN A$=LEFT$(A$,2)+"(1)"+RIGHT$(A$,LEN(A$)-2) ELSE A$="(1)"+A$
  108. 1080   TMSG$="save中です."+WA$: GOSUB *WRITE_TMSG
  109. 1090   ADR1=VARPTR(PCMBUF%(0))
  110. 1100   OPEN "R",#1,A$:FIELD #1,1 AS B$
  111. 1110   *REC_SKIP1
  112. 1120   FOR J=0 TO 9
  113. 1130    LOCATE 60,23:PRINT "今";J;"秒目です"
  114. 1140    FOR I=1 TO 19200
  115. 1150      LSET B$=CHR$(PEEK(ADR1)):PUT #1:ADR1=ADR1+1
  116. 1160    NEXT I
  117. 1170   NEXT J
  118. 1180   *REC_END:  CLOSE #1  :GOSUB *ERASE_TMSG :CLS 4
  119. 1190 RETURN
  120. 1200  '
  121. 1210 *SV1 
  122. 1220   TMSG$="何秒目からsaveしますか"    :GOSUB *WRITE_TMSG
  123. 1230   LOCATE 30,23     :INPUT LOC0 :CLS 4 :IF  LOC0<1 THEN LOC1=1 
  124. 1240   TMSG$="何秒目までsaveしましょうか":GOSUB *WRITE_TMSG
  125. 1250   LOCATE 30,23     :INPUT LOC1 :CLS 4 :IF  LOC1>30 THEN LOC1=30
  126. 1260    IF LOC1 <= LOC0 THEN  RETURN
  127. 1270   NUM=(LOC1-LOC0)*19200 
  128. 1280   LOC2=PCMDATAF%(6):LOC3=PCMDATA%(7)
  129. 1290   PCMDATA%(7)=NUM \ 65536
  130. 1300   NUM=NUM MOD 65536: IF NUM > 32767 THEN PCMDATA%(6)=NUM-65536 ELSE PCMDATA%(6)=NUM
  131. 1310   EXT$="snd":GOSUB *FILE_MSG
  132. 1320   IF MID$(A$,2,1)=":" THEN A$=LEFT$(A$,2)+"(1)"+RIGHT$(A$,LEN(A$)-2) ELSE A$="(1)"+A$
  133. 1330   TMSG$="save中です. "+WA$ :GOSUB *WRITE_TMSG
  134. 1340   ADR1=VARPTR(PCMDATA%(0))
  135. 1350   OPEN "R",#1,A$:FIELD #1,1 AS B$
  136. 1360   FOR I=1 TO 32 
  137. 1370     LSET B$=CHR$(PEEK(ADR1)):PUT #1:ADR1=ADR1+1
  138. 1380   NEXT I
  139. 1390   ADR1=VARPTR(PCMDATA%(0))+LOC0*19200+32
  140. 1400   FOR J=LOC0 TO LOC1-1
  141. 1410   LOCATE 60,23:PRINT "今";J;"秒目です"
  142. 1420     FOR I=1 TO 19200
  143. 1430       LSET B$=CHR$(PEEK(ADR1)):PUT #1:ADR1=ADR1+1 
  144. 1440     NEXT I
  145. 1450   NEXT J
  146. 1460   CLOSE #1
  147. 1470   GOSUB *ERASE_TMSG:CLS 4
  148. 1480   PCMDATA%(6)=LOC2:PCMDATA%(7)=LOC3
  149. 1490 RETURN
  150. 1500 '
  151. 1510 *HCOPY
  152. 1520   TMSG$="ハ-ドコピ-です" :GOSUB *WRITE_TMSG
  153. 1530    HARDC 1
  154. 1540   GOSUB *ERASE_TMSG
  155. 1550 RETURN
  156. 1560 '
  157. 1570 '
  158. 1580 '
  159. 1590 '
  160. 1600 *MAKE
  161. 1610   TMSG$="計算中です. "+WA$ :GOSUB *WRITE_TMSG
  162. 1620   MOUSE 1,,,0
  163. 1630   RETRY_F=1
  164. 1640   WHILE RETRY_F
  165. 1650     RETRY_F=0:CHENGE_F=1:MARK=0
  166. 1660     ADR1=VARPTR(PCMDATA%(0))+32
  167. 1670     FOR I=1 TO 600
  168. 1680        IF STAT%(I) >=63 THEN ADR1=ADR1+960:GOTO *F_END2
  169. 1690         CL=0
  170. 1700         GET@A (I+19,142)-(I+19,206),VDBUF%
  171. 1710         LOC0=STAT%(I)
  172. 1720          IF LOC1<>VDBUF%(128-LOC0*2) THEN CHENGE_F=1
  173. 1740         LOC1=VDBUF%(128-LOC0*2)
  174. 1750          IF LOC1 <> 0 AND LOC1<>MARK THEN *MK_SKIP1
  175. 1760             CHENGE_F=1:ADR1=ADR1+960
  176. 1770             IF LOC1=MARK AND MARK<>0 THEN CL=2 ELSE MARK=15:CL=0
  177. 1780             GOTO *F_END
  178. 1790         *MK_SKIP1
  179. 1800         IF CHENGE_F=0 THEN *MK_SKIP2
  180. 1810           ERASE PCMBUF% :DIM PCMBUF%(96016)
  181. 1820           LOAD@ FLNAMES$(LOC1),PCMBUF%
  182. 1830           ADR2=VARPTR(PCMBUF%(0))+32
  183. 1840           CHENGE_F=0
  184. 1850         *MK_SKIP2
  185. 1860         FOR J=LOC0 TO 63
  186. 1870           MARK=VDBUF%(128-J*2)
  187. 1880           IF VDBUF%(128-J*2) = 0    THEN *MK_BREAK
  188. 1890           IF VDBUF%(128-J*2) <> LOC1 THEN CL=1:RETRY_F=1:GOTO *MK_BREAK
  189. 1900         NEXT J
  190. 1910         MARK=0
  191. 1920         *MK_BREAK
  192. 1930         DIVP=64/(J-LOC0+.5!)
  193. 1940         STAT%(I)=J:LOC0=J
  194. 1950         '
  195. 1960         FOR K=1 TO 960
  196. 1970           A1=PEEK(ADR1):IF A1>127 THEN A1=128-A1
  197. 1980           A2=PEEK(ADR2):IF A2>127 THEN A2=128-A2
  198. 1990           A2=A1+A2\DIVP:IF A2<0   THEN A2=128-A2
  199. 2000           POKE ADR1,A2
  200. 2010           ADR1=ADR1+1:ADR2=ADR2+1
  201. 2020         NEXT K
  202. 2030       *F_END:
  203. 2040       LINE(I+19,231)-(I+19,239),PSET,%(CL+1)
  204. 2050       *F_END2
  205. 2060     NEXT I
  206. 2070    '
  207. 2080   WEND
  208. 2090   *MK_END
  209. 2100   GOSUB *ERASE_TMSG
  210. 2110   MOUSE 1,,,1
  211. 2120 RETURN
  212. 2130 '                              
  213. 2140 *FILE_LOAD        '**/ (arg0 is index) [a$,loc0]   
  214. 2150   EXT$="snd":GOSUB *FILE_MSG
  215. 2160   IF A$="" THEN FLNAMES$(ARG0)=A$:FLLNG&(ARG0)=0:GOTO *FL_SKIP2
  216. 2170     LOAD@ A$,PCMBUF%  :PCMPLAY PCMBUF% :GOTO *FL_SKIP1
  217. 2180        A$="":FLNAMES$(ARG0)=A$:GOTO *FL_SKIP2
  218. 2190     *FL_SKIP1:FLNAMES$(ARG0)=A$
  219. 2200     IF PCMBUF%(6)>0 THEN FLLNG&(ARG0)=PCMBUF%(6)ELSE FLLNG&(ARG0)=65536+PCMBUF%(6)
  220. 2210     FLLNG&(ARG0)=FLLNG&(ARG0)+PCMBUF%(7)*65536
  221. 2220   *FL_SKIP2 :CLS 4 :GOSUB *ERASE_TMSG
  222. 2230   GOSUB *WRITE_ED_MENU
  223. 2240 RETURN
  224. 2250 '   
  225. 2260 *PATTERN_EDIT        '**/ (arg0 is index) [loc0,loc1,loc2,loc3]
  226. 2270   LOC0=ARG0-14:IF FLLNG&(LOC0)=0 THEN RETURN  'LOC0 is Color
  227. 2280   TMSG$="put Pattern to Sound Track" :GOSUB *WRITE_TMSG
  228. 2290   LINE(250,438)-(300,450),PSET,%LOC0,BF
  229. 2300   LOC2=0                                      ' LOC2 is start point
  230. 2310   LOC3=INT(FLLNG&(LOC0)/960)+1                ' LOC3 is right limit
  231. 2320   '
  232. 2330   WHILE LOC2 <LOC3
  233. 2340     LOC1=0                                    ' LOC1 is volume
  234. 2350     *WTOP
  235. 2360     GOSUB *GET_MOUSE:IF ARG0=1 THEN *P_E_END
  236. 2370     IF ARG1 < 20 OR ARG1 > 619 THEN *P_E_END  'ARG1 is end point of X
  237. 2380     IF ARG1 < LOC2             THEN *P_E_END
  238. 2390     IF ARG1 = LOC2             THEN *P_E_SKIP
  239. 2400     IF ARG2 < 142  THEN ARG2=142              'ARG2 is end point of Y
  240. 2410     IF ARG2 > 204  THEN ARG2=204
  241. 2420     IF LOC2 = 0    THEN LOC2=ARG1:LOC3=LOC3+ARG1:GOTO *WTOP
  242. 2430     IF ARG1 > LOC3 THEN ARG1=LOC3
  243. 2440     MOUSE 1,,,0 :I=LOC2
  244. 2450     WHILE I<ARG1
  245. 2460        L=206:IF POINT (I,ARG2)=-1 THEN *P_E_SKIP
  246. 2470        FOR K=ARG2+1 TO 206 
  247. 2480          IF POINT (I,K) =-1  THEN L=K-1 :K=207
  248. 2490        NEXT K
  249. 2500        IF LOC1=0 THEN LOC1=2^INT(LOG(L-ARG2)/LOG(2)+.5!)
  250. 2520        K=LOC1  :WHILE  L-K< 141: K=LOC1/2: WEND
  251. 2530        IF L<=ARG2 THEN *P_E_SKIP
  252. 2540        LINE(I,L)-(I,L-K+1),PSET,%LOC0
  253. 2550        LINE(I,231)-(I,239),PSET,%0
  254. 2560      *P_E_SKIP :I=I+1
  255. 2570     WEND
  256. 2580     LOC2=ARG1:MOUSE 1,ARG1,ARG2,1
  257. 2590   WEND
  258. 2600   *P_E_END: 
  259. 2610   GOSUB *ERASE_TMSG
  260. 2620   GOSUB *ERASE_TMSG
  261. 2630 RETURN
  262. 2640 '
  263. 2650 *ERASE_PATTERN      '**/ (arg1 is X posi.)
  264. 2660   LOC0=ARG1
  265. 2670   TMSG$="Erase":GOSUB *WRITE_TMSG           'LOC0 is start point of X
  266. 2680   GOSUB *GET_MOUSE :IF ARG0=1 THEN *E_P_END 'ARG1 is end point of X
  267. 2690   IF ARG1 <20   OR ARG1 >619  THEN *E_P_END 'ARG2 is end point of Y
  268. 2700   IF ARG2 < 230 OR ARG2 >240  THEN *E_P_END
  269. 2710   IF ARG1 < LOC0              THEN *E_P_END
  270. 2720   LINE(LOC0,142)-(ARG1,206),PSET,%0,BF
  271. 2730   LINE(LOC0,231)-(ARG1,239),PSET,%0,BF
  272. 2740   FOR I=LOC0-19 TO ARG1-19
  273. 2750     STAT%(I)=0                              ' Header is 32 byte
  274. 2760      FOR K=32 TO 511 :PCMDATA%((I-1)*480+K)=128 :NEXT K
  275. 2770     LINE(I+19,231)-(I+19,239),PSET,%1
  276. 2780   NEXT I
  277. 2790   *E_P_END  :GOSUB *ERASE_TMSG
  278. 2800 RETURN
  279. 2810 '
  280. 2820 MOUSE 1,,,1
  281. 2830 RETURN
  282. 2840 ':::::::::::::::::::::::::::::::::::: end Service Routine :::::::
  283. 2850 '
  284. 2860 '
  285. 2870 *GET_MOUSE    '**/ RET. IS  arg0,arg1,arg2 is botten,X,Y    
  286. 2880   IF MOUSE (2,0) THEN ARG0=0::GOTO *M_ON
  287. 2890   IF MOUSE (2,1) THEN ARG0=1: GOTO *M_ON
  288. 2900     GOTO *GET_MOUSE
  289. 2910   *M_ON
  290. 2920   IF MOUSE(2,ARG0) THEN *M_ON
  291. 2930   ARG1=MOUSE(4,ARG0):ARG2=MOUSE(5,ARG0)
  292. 2940 RETURN
  293. 2950 '
  294. 2960 *GET_CMD_POSI  '**/ (arg1,arg2 mouse posi.) [LOC0] ; RET. IS cmd_ind 
  295. 2970   CMD_IND=0
  296. 2980   IF ARG1>460 AND ARG1< 500 THEN LOC0=0:GOTO *X_OK
  297. 2990   IF ARG1>560 AND ARG1< 640 THEN LOC0=1:GOTO *X_OK
  298. 3000     RETURN
  299. 3010   *X_OK
  300. 3020   IF ARG2>17 AND ARG2<103 THEN CMD_IND=LOC0*4+(ARG2-8)\19:RETURN
  301. 3030 RETURN
  302. 3040 '
  303. 3050 *GET_ED_POSI    '**/ (arg1,arg2 mouse posi.) [LOC0]; RET. IS arg0
  304. 3060   IF ARG1>10 AND ARG1<620 AND ARG2>262 AND ARG2<396 THEN  *BOX_OK
  305. 3070    ARG0=0:RETURN
  306. 3080   *BOX_OK
  307. 3090   LOC0=(ARG2-244)\19
  308. 3100   IF ARG1 <  100 THEN ARG0=LOC0:RETURN
  309. 3110   IF ARG1 <  300 THEN ARG0=LOC0+14:RETURN
  310. 3120   IF ARG1 <  420 THEN ARG0=LOC0+7:RETURN
  311. 3130   ARG0=LOC0+21
  312. 3140 RETURN
  313. 3150  '
  314. 3160  '
  315. 3170 *WRITE_ALL_CMD  '**/ (cmd_sw is color)   
  316. 3180   LINE(450,20)-(633,105),PSET,%15,BF,%0
  317. 3190   FOR CMD_IND=1 TO CMD_NUM
  318. 3200     GOSUB *WRITE_CMD
  319. 3210   NEXT CMD_IND
  320. 3220 RETURN
  321. 3230 '
  322. 3240 *WRITE_CMD      '**/ (cmd_ind is index, cmd_sw is color)
  323. 3250  IF CMD_IND<5 THEN LOC0=460:LOC1=CMD_IND*19+10 ELSE LOC0=560:LOC1=CMD_IND*19-66
  324. 3260  SYMBOL (LOC0,LOC1),CMDNAMES$(CMD_IND),1,1,%CMD_SW,,,2
  325. 3270  RETURN
  326. 3280 '
  327. 3290 *WRITE_ED_MENU    '**/ (ARG0 is index)[a$,loc0,loc1] 
  328. 3300   IF ARG0=0 THEN RETURN
  329. 3310   A$=FLNAMES$(ARG0)
  330. 3320   GOSUB *PASS_BREAK
  331. 3330   IF A$="" THEN A$="  "+STR$(ARG0) 
  332. 3340   '
  333. 3350   IF ARG0 >7 THEN LOC1=330:LOC2=115 ELSE LOC1=10:LOC2=248
  334. 3360   LINE(LOC1,ARG0*19+LOC2)-(LOC1+290,ARG0*19+LOC2+14),PSET,%0,BF
  335. 3370   LOC0=FLLNG&(ARG0)/960
  336. 3380   SYMBOL(LOC1,ARG0*19+LOC2),A$,1,1,%15,,,0
  337. 3390   LINE (LOC1+90,ARG0*19+LOC2)-(LOC0+LOC1+90,ARG0*19+LOC2+12),PSET,%ARG0,BF
  338. 3400   LINE (LOC0+LOC1+90,ARG0*19+LOC2)-(LOC1+290,ARG0*19+LOC2+12),PSET,%ARG0,B
  339. 3410 RETURN
  340. 3420 '
  341. 3430 '
  342. 3440 *WRITE_TMSG           '**/ TMSG$ is message
  343. 3450  LINE(6,430)-(633,458),PSET,%15,BF,%0
  344. 3460  SYMBOL (17,437),TMSG$,1,1,%2,,,1
  345. 3470  RETURN
  346. 3480 '
  347. 3490 *ERASE_TMSG
  348. 3500  LINE(6,430)-(633,458),PSET,%15,BF,%0
  349. 3510  RETURN
  350. 3520 '
  351. 3530 '
  352. 3540 '
  353. 3550 *PASS_BREAK          '**/ A$ is arg. and ret.
  354. 3560   LOC1=LEN(A$):LOC0=0
  355. 3570   IF MID$( A$,2,1)=":" THEN A$=MID$ (A$,3)
  356. 3580   FOR I=1 TO LOC1
  357. 3590     IF MID$ (A$,I,1) = "\" THEN LOC0=I
  358. 3600   NEXT I
  359. 3610   A$=MID$(A$,LOC0+1)
  360. 3620   LOC0=INSTR(A$,".")
  361. 3630   IF LOC0 <>0 THEN A$=LEFT$(A$,LOC0-1)
  362. 3640 RETURN
  363. 3650 '
  364. 3660 *FILE_MSG            '**/ A$ is ret.   
  365. 3670   TMSG$="Input File Name ":GOSUB *WRITE_TMSG
  366. 3680   LOCATE 20,23:LINE INPUT A$:CLS 4
  367. 3690   IF A$="" THEN *FM_SKIP
  368. 3700   LOC0=INSTR(A$,".")
  369. 3710   IF LOC0<>0 THEN A$=LEFT$(A$,LOC0)+EXT$ ELSE A$=A$+"."+EXT$
  370. 3720   *FM_SKIP :CLS 4  :GOSUB *ERASE_TMSG
  371. 3730 RETURN
  372. 3740 '
  373. 3750 '
  374. 3760 '
  375. 3770 *CMDNAMES
  376. 3780  DATA "play","record","make","quit","PCM save","HardCopy"
  377. 3790 *COLOR
  378. 3800  DATA 255,255,255,  0,  0,128,  0,128,  0,  0,128,128  
  379. 3810  DATA 128,  0,  0,128,  0,128,128,128,  0,128,128,128  
  380. 3820  DATA  64, 64, 64,  0,  0,255,  0,255,  0,  0,255,255
  381. 3830  DATA 255,  0,  0,255,  0,255,255,  0,  0,  0,  0,  0
  382. 3840  '
  383. 3850  *ERROR:  TMSG$="Error No. "+STR$(ERR)+"   マウスをクリックしてください":GOSUB *WRITE_TMSG: GOSUB *GET_MOUSE: GOSUB *ERASE_TMSG
  384. 3860 IF ERL=2170 THEN RESUME 2180 
  385. 3870 RESUME NEXT
  386. 3880 '
  387. 3890 '
  388.